"Nag Screen" removing 01



  • Programm: CuteFTP ver. 2.8 (Shareware)
  • Protection: "Nag Screen"
  • Ziel: "Nag Screen" entfernen

  • Autor: |VerTex|
  • Datum: 13.01.2000
  • Email: VerTex.TGC@gmx.net


  • Inhalt

  • 1. Einleitung
  • 2. Tools
  • 3. Tutor
  • 4. Sonstiges



  • Einleitung

    Hi Leute!
    Heute will ich euch mal versuchen zu zeigen, wie man "Nag Screens" entfernt. Ich nehme das Programm CuteFTP 2.8, weil ich das zur Zeit brauche um für meine Homepage ein paar Sachen hoch zu laden.
    Wenn ihr das Programm habt, wisst ihr ja bestimmt das am Anfang immer dieser nag screen kommt, von wegen "Dies ist nur Shareware, usw." Das wollen wir nicht mehr sehen! Da müssen wir halt zum cracken zurückgreifen.
    Leider weiss nicht mehr genau wie ich es gamacht habe (so lange her), aber ich versuche es mal. Was ich nicht mehr weiss ist mit "??" gekennzeichnet! Ich hoffe nicht so viel :)



    Tools

  • 1. Die Shareware Version 2.8 von CuteFTP
  • 2. Win32DASM




  • Tutor

    Hier zum vorstellen ein pseudo code!

    ...
    ...
    Start des Programms
    ...
    ...
    Goto "Prüfe Tage / Nag Screen"                   <-- Hier geht er zu Prüfroutine!!!!!
    Goto "Programm Oberfläche"         *||*          <-- Hier startet er das Programm!
    
    :"Prüfe Tage / Nag Screen"                       <-- Entweder Tage Zählen oder Shareware Screen
    prüfen                                           <-- Hier startet die Routine
    prüfen
    prüfen
    prüfen 
    If Tage > 30 Then "Exit Programm"                <-- Wenn mehr als 30 Tage dann Prog beenden.
    Else Begin
      Hallo nur noch blabla Tage bis zum...          <-- Meldung oder ähnliches!
      RETURN                                         <-- Hier springt er zurück zu *||*
    End
    
    :"Programm Oberfläche"                           <-- Programm ist einsatzbereit!
    ...
    ...
    ...                                              <-- !Hier steht das eigentliche Programm!
    ...
    ...
    Ende des Programms
    

    So, 2 überlegungen: Entweder geht man her und "nopped" den jump --> die Prüfroutine wird damit nicht aufgerufen. Aber man patched dabei meist 2 bis 6 bytes.
    Daher eleganter meine 2. Version. Man lässt den Jump ausführen und schreibt in der 1. Zeile der Prüfroutine ein Return sprich "ret" in assembler --> das Programm prüft nichts sondern springt sofort wieder zurück! :) und durch das "ret" patcht man nur 1 byte (C3h).

    Nicht schlecht oder? Aber das Problem ist, man muss die richtige Stelle finden! Hierzu ein Beispiel für CuteFTP32 ver. 2.8

    :00413006 90                      nop
    :00413007 90                      nop
    :00413008 90                      nop
    :00413009 90                      nop           die ganzen nop (no operation) lassen mich darauf
    :0041300A 90                      nop           schliessen, das hier eine komplett neue Prozedur
    :0041300B 90                      nop           aufgerufen wird. Wegen dem großen Leerraum.
    :0041300C 90                      nop
    :0041300D 90                      nop
    :0041300E 90                      nop
    :0041300F 90                      nop
    
    * Referenced by a CALL at Address:  
    |:004310CA                                          <-- Von dieser Adresse wird die Prozedur aufgerufen!
    |
    :00413010 55                      pop edi           <-- habe durch C3 ersetzt (return bevor check startet)
    :00413011 FF68BE                  jmp far [eax-42]
    :00413014 D24600                  rol byte ptr [esi+00], cl
    :00413017 64A100000000            mov eax, dword ptr fs:[00000000]
    :0041301D 50                      push eax
    :0041301E 64892500000000          mov dword ptr fs:[00000000], esp
    :00413025 83EC34                  sub esp, 00000034
    :00413028 53                      push ebx
    :00413029 56                      push esi
    :0041302A 57                      push edi
    
    * Reference To: ADVAPI32.RegDeleteKeyA, Ord:0162h      REG!      <- hier wird was in der reg gemacht!
                                      |
    :0041302B 8B3D20404700            mov edi, dword ptr [00474020]
    
    * Possible StringData Ref from Data Obj ->"pfc\CFK12"
                                      |
    :00413031 68E4E14800              push 0048E1E4
    :00413036 8BD9                    mov ebx, ecx
    :00413038 6800000080              push 80000000
    :0041303D C744242014000000        mov [esp+20], 00000014
    :00413045 FFD7                    call edi
    
    * Possible StringData Ref from Data Obj ->"pfc\CFK13"
                                      |
    :00413047 68D8E14800              push 0048E1D8
    :0041304C 6800000080              push 80000000
    :00413051 FFD7                    call edi
    
    * Possible StringData Ref from Data Obj ->"pfc\CFK14"
                                      |
    :00413053 68CCE14800              push 0048E1CC
    :00413058 6800000080              push 80000000
    :0041305D FFD7                    call edi
    
    * Possible StringData Ref from Data Obj ->"pfc\CFK15"
                                      |
    :0041305F 68C0E14800              push 0048E1C0
    :00413064 6800000080              push 80000000
    :00413069 FFD7                    call edi
    :0041306B 8D44240C                lea eax, dword ptr [esp+0C]
    :0041306F 50                      push eax
    
    * Possible StringData Ref from Data Obj ->"pfc\CFK25"
                                      |
    :00413070 68B4E14800              push 0048E1B4
    :00413075 6800000080              push 80000000
    
    * Reference To: ADVAPI32.RegOpenKeyA, Ord:0171h        REG!      <- hier wird was in der reg gemacht!
                                      |
    :0041307A FF1524404700            Call dword ptr [00474024]
    :00413080 85C0                    test eax, eax
    :00413082 0F857B020000            jne 00413303
    :00413088 8B44240C                mov eax, dword ptr [esp+0C]
    :0041308C 8D4C2418                lea ecx, dword ptr [esp+18]
    :00413090 8D54242C                lea edx, dword ptr [esp+2C]
    :00413094 51                      push ecx
    :00413095 33F6                    xor esi, esi
    :00413097 52                      push edx
    :00413098 56                      push esi
    :00413099 50                      push eax
    
    * Reference To: ADVAPI32.RegQueryValueA, Ord:017Ah     REG!      <- hier wird was in der reg gemacht!
                                     |
    :0041309A FF1528404700            Call dword ptr [00474028]
    :004130A0 85C0                    test eax, eax
    :004130A2 0F8532020000            jne 004132DA
    :004130A8 8D4C2410                lea ecx, dword ptr [esp+10]
    :004130AC 8D542414                lea edx, dword ptr [esp+14]
    :004130B0 51                      push ecx
    :004130B1 52                      push edx
    :004130B2 8D442434                lea eax, dword ptr [esp+34]
    ...
    ...
    ...
    
    Hier könnte man schliessen das das Programm irgendwas in der Regestry prüft. Vielleicht Registriert? Daher könnte das die Prüfroutine sein. Aber von wo wurde sie gerufen. Mal schauen...

    * Possible StringData Ref from Data Obj ->"WINHELP\CFK14"
                                      |
    :00431090 68A0ED4800              push 0048EDA0
    :00431095 6800000080              push 80000000
    :0043109A FFD6                    call esi
    :0043109C E8671E0300              call 00462F08
    :004310A1 8B4004                  mov eax, dword ptr [eax+04]
    :004310A4 6A00                    push 00000000
    :004310A6 8BC8                    mov ecx, eax
    :004310A8 E8B31CFEFF              call 00412D60
    :004310AD 85C0                    test eax, eax
    :004310AF 7520                    jne 004310D1
    :004310B1 E8521E0300              call 00462F08
    :004310B6 8B4004                  mov eax, dword ptr [eax+04]
    :004310B9 6A01                    push 00000001
    :004310BB 8BC8                    mov ecx, eax
    :004310BD E86E23FEFF              call 00413430
    :004310C2 E8411E0300              call 00462F08
    :004310C7 8B4804                  mov ecx, dword ptr [eax+04]
    :004310CA E8411FFEFF              call 00413010                    <-- hier wird die proz. "gecallt"
    :004310CF EB11                    jmp 004310E2                     <-- hier startet das Programm    
    ...                                                                    
    ...
    ...
    
    Also dürfte jedem klar sein, was zu tun ist. Entweder man nopped diesen Call oder man setzt ein return in die erste Zeile von der "gecallten Prozedur". Dann aber los...



    Sonstige

    Ich hoffe das hat dir ein wenig geholfen?? Und das wir uns in meinem Nächsten Tutor sehen. Und wenn dir noch irgendetwas einfäält mail mir einfach!

    Grüsse gehen raus an die Kryptocrew, Fireball, ultraschall und an den Rest der TGC Crew